// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include "windows.h"
// #define MAX_SIZE 100  // 栈的最大容量
//
// // 共享栈的结构体
// typedef struct {
//     int data[MAX_SIZE];  // 用于存储栈的数组
//     int topA;             // 栈A的栈顶
//     int topB;             // 栈B的栈顶
// } SharedStack;
//
// // 初始化共享栈
// void initStack(SharedStack* stack) {
//     stack->topA = -1;  // 栈A的栈顶初始为-1
//     stack->topB = MAX_SIZE;  // 栈B的栈顶初始为数组的最大值
// }
//
// // 判断栈A是否为空
// bool StackAEmpty(SharedStack* stack) {
//     return stack->topA == -1;
// }
//
// // 判断栈B是否为空
// bool StackBEmpty(SharedStack* stack) {
//     return stack->topB == MAX_SIZE;
// }
//
// // 判断栈A是否已满
// bool StackAFull(SharedStack* stack) {
//     return stack->topA + 1 == stack->topB;
// }
//
// // 判断栈B是否已满
// bool StackBFull(SharedStack* stack) {
//     return stack->topB - 1 == stack->topA;
// }
//
// // 进栈A
// bool PushA(SharedStack* stack, int value) {
//     if (StackAFull(stack)) {
//         printf("栈A已满，无法进栈\n");
//         return false;
//     }
//     stack->topA=stack->topA + 1;
//     stack->data[stack->topA] = value;
//     return true;
// }
//
// // 进栈B
// bool PushB(SharedStack* stack, int value) {
//     if (StackBFull(stack)) {
//         printf("栈B已满，无法进栈\n");
//         return false;
//     }
//     stack->data[--(stack->topB)] = value;
//     return true;
// }
//
// // 出栈A
// bool PopA(SharedStack* stack, int* value) {
//     if (StackAEmpty(stack)) {
//         printf("栈A为空，无法出栈\n");
//         return false;
//     }
//     *value = stack->data[(stack->topA)--];
//     return true;
// }
//
// // 出栈B
// bool PopB(SharedStack* stack, int* value) {
//     if (StackBEmpty(stack)) {
//         printf("栈B为空，无法出栈\n");
//         return false;
//     }
//     *value = stack->data[(stack->topB)++];
//     return true;
// }
//
// // 获取栈A的栈顶元素
// bool GetTopA(SharedStack* stack, int* value) {
//     if (StackAEmpty(stack)) {
//         printf("栈A为空，无法获取栈顶元素\n");
//         return false;
//     }
//     *value = stack->data[stack->topA];
//     return true;
// }
//
// // 获取栈B的栈顶元素
// bool GetTopB(SharedStack* stack, int* value) {
//     if (StackBEmpty(stack)) {
//         printf("栈B为空，无法获取栈顶元素\n");
//         return false;
//     }
//     *value = stack->data[stack->topB];
//     return true;
// }
//
// // 打印栈A的元素
// void PrintStackA(SharedStack* stack) {
//     if (StackAEmpty(stack)) {
//         printf("栈A为空\n");
//         return;
//     }
//     printf("栈A的元素: ");
//     for (int i = 0; i <= stack->topA; i++) {
//         printf("%d ", stack->data[i]);
//     }
//     printf("\n");
// }
//
// // 打印栈B的元素
// void PrintStackB(SharedStack* stack) {
//     if (StackBEmpty(stack)) {
//         printf("栈B为空\n");
//         return;
//     }
//     printf("栈B的元素: ");
//     for (int i = stack->topB; i < MAX_SIZE; i++) {
//         printf("%d ", stack->data[i]);
//     }
//     printf("\n");
// }
//
// // 测试代码
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     SharedStack stack;
//     int value;
//
//     // 初始化共享栈
//     initStack(&stack);
//
//     // 进栈A
//     PushA(&stack, 10);
//     PushA(&stack, 20);
//     PushA(&stack, 30);
//
//     // 进栈B
//     PushB(&stack, 40);
//     PushB(&stack, 50);
//     PushB(&stack, 60);
//
//     // 打印栈A和栈B
//     PrintStackA(&stack);
//     PrintStackB(&stack);
//
//     // 获取栈A栈顶元素
//     if (GetTopA(&stack, &value)) {
//         printf("栈A栈顶元素: %d\n", value);
//     }
//
//     // 获取栈B栈顶元素
//     if (GetTopB(&stack, &value)) {
//         printf("栈B栈顶元素: %d\n", value);
//     }
//
//     // 出栈A
//     if (PopA(&stack, &value)) {
//         printf("栈A出栈元素: %d\n", value);
//     }
//
//     // 出栈B
//     if (PopB(&stack, &value)) {
//         printf("栈B出栈元素: %d\n", value);
//     }
//
//     // 打印栈A和栈B
//     PrintStackA(&stack);
//     PrintStackB(&stack);
//
//     return 0;
// }
